﻿<!DOCTYPE HTML>
<!-- saved from url=(0072)http://172.13.19.31:6060/note_html/服务器/CentOS/11006-shell-运算符.html -->
<!DOCTYPE html PUBLIC "" ""><HTML><HEAD><META content="IE=11.0000" 
http-equiv="X-UA-Compatible">
 
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<TITLE>shell-运算符</TITLE> <LINK href="shell-运算符_files/standalone.css" rel="stylesheet"> 
<LINK href="shell-运算符_files/overlay-apple.css" rel="stylesheet"> <LINK href="shell-运算符_files/article_edit.css" 
rel="stylesheet"> 
<STYLE type="text/css">
	#content{
		margin: 5px 10px;
	}
</STYLE>
	 <!-- 代码高亮 -->	 <LINK href="shell-运算符_files/shCoreEclipse.css" 
rel="stylesheet">	 <LINK href="shell-运算符_files/my-highlighter.css" rel="stylesheet"> 
<META name="GENERATOR" content="MSHTML 11.00.10586.545"></HEAD> 
<BODY>
<DIV id="content">
<H1 align="center">shell-运算符</H1>
<P align="right" 
style="margin: 0px 10px 0px 0px; padding: 0px;">最后修改时间：2015-09-01 15:36:13</P>
<HR style="border-width: 2px; border-color: lime;">

<H3>算术运算符expr</H3>
<H4>示例</H4>
<PRE class="brush: bash;">    #!/bin/sh
    a=10
    b=20
    val=`expr $a + $b`
    echo "a + b : $val"
    val=`expr $a - $b`
    echo "a - b : $val"
    val=`expr $a \* $b`
    echo "a * b : $val"
    val=`expr $b / $a`
    echo "b / a : $val"
    val=`expr $b % $a`
    echo "b % a : $val"
    if [ $a == $b ]
    then
       echo "a is equal to b"
    fi
    if [ $a != $b ]
    then
       echo "a is not equal to b"
    fi

运行结果：

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b
</PRE>
<H4>算术运算符列表</H4>
<TABLE>
  <TBODY>
  <TR>
    <TH>      运算符</TH>
    <TH>      说明</TH>
    <TH>      举例</TH></TR>
  <TR>
    <TD>+</TD>
    <TD>加法</TD>
    <TD>`expr $a + $b` 结果为&nbsp;30。</TD></TR>
  <TR>
    <TD>-</TD>
    <TD>减法</TD>
    <TD>`expr $a - $b` 结果为 10。</TD></TR>
  <TR>
    <TD>*</TD>
    <TD>乘法</TD>
    <TD>`expr $a \* $b` 结果为 &nbsp;200。</TD></TR>
  <TR>
    <TD>/</TD>
    <TD>除法</TD>
    <TD>`expr $b / $a` 结果为&nbsp;2。</TD></TR>
  <TR>
    <TD>%</TD>
    <TD>取余</TD>
    <TD>`expr $b % $a` 结果为&nbsp;0。</TD></TR>
  <TR>
    <TD>=</TD>
    <TD>赋值</TD>
    <TD>a=$b 将把变量 b 的值赋给 a。</TD></TR>
  <TR>
    <TD>==</TD>
    <TD>相等。用于比较两个数字，相同则返回 true。</TD>
    <TD>[ $a == $b ] 返回&nbsp;false。</TD></TR>
  <TR>
    <TD>!=</TD>
    <TD>不相等。用于比较两个数字，不相同则返回 true。</TD>
    <TD>[ $a != $b ] 返回 true。</TD></TR></TBODY></TABLE>
<H4>注意事项</H4>
<UL style="color: red;">
  <LI>表达式和运算符之间要有空格，例如 2+2 是不对的，必须写成 2 + 2，这与我们熟悉的大多数编程语言不一样</LI>
  <LI>完整的表达式要被 ` ` （反引号）包含，注意这个字符不是常用的单引号，在 Esc 键下边</LI>
  <LI>乘号(*)前边必须加反斜杠(\)才能实现乘法运算</LI>
  <LI>条件表达式要放在方括号之间，并且要有空格，例如 [$a==$b] 是错误的，必须写成 [ $a == $b ]</LI></UL>
<H3>关系运算符</H3>
<H4>示例</H4>
<PRE class="brush: bash;">    #!/bin/sh
    a=10
    b=20
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a is equal to b"
    else
       echo "$a -eq $b: a is not equal to b"
    fi
    if [ $a -ne $b ]
    then
       echo "$a -ne $b: a is not equal to b"
    else
       echo "$a -ne $b : a is equal to b"
    fi
    if [ $a -gt $b ]
    then
       echo "$a -gt $b: a is greater than b"
    else
       echo "$a -gt $b: a is not greater than b"
    fi
    if [ $a -lt $b ]
    then
       echo "$a -lt $b: a is less than b"
    else
       echo "$a -lt $b: a is not less than b"
    fi
    if [ $a -ge $b ]
    then
       echo "$a -ge $b: a is greater or  equal to b"
    else
       echo "$a -ge $b: a is not greater or equal to b"
    fi
    if [ $a -le $b ]
    then
       echo "$a -le $b: a is less or  equal to b"
    else
       echo "$a -le $b: a is not less or equal to b"
    fi

运行结果：

10 -eq 20: a is not equal to b
10 -ne 20: a is not equal to b
10 -gt 20: a is not greater than b
10 -lt 20: a is less than b
10 -ge 20: a is not greater or equal to b
10 -le 20: a is less or  equal to b
</PRE>
<H4>关系运算符列表</H4>
<TABLE>
  <TBODY>
  <TR>
    <TH>      运算符</TH>
    <TH>      说明</TH>
    <TH>      举例</TH></TR>
  <TR>
    <TD>-eq</TD>
    <TD>检测两个数是否相等，相等返回 true。</TD>
    <TD>[ $a -eq $b ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-ne</TD>
    <TD>检测两个数是否相等，不相等返回 true。</TD>
    <TD>[ $a -ne $b ] 返回 true。</TD></TR>
  <TR>
    <TD>-gt</TD>
    <TD>检测左边的数是否大于右边的，如果是，则返回 true。</TD>
    <TD>[ $a -gt $b ] 返回 false。</TD></TR>
  <TR>
    <TD>-lt</TD>
    <TD>检测左边的数是否小于右边的，如果是，则返回 true。</TD>
    <TD>[ $a -lt $b ] 返回 true。</TD></TR>
  <TR>
    <TD>-ge</TD>
    <TD>检测左边的数是否大等于右边的，如果是，则返回 true。</TD>
    <TD>[ $a -ge $b ] 返回 false。</TD></TR>
  <TR>
    <TD>-le</TD>
    <TD>检测左边的数是否小于等于右边的，如果是，则返回 true。</TD>
    <TD>[ $a -le $b ] 返回 true。</TD></TR></TBODY></TABLE>
<H4>注意事项</H4>
<UL style="color: red;">
  <LI>关系运算符只支持数字，不支持字符串，除非字符串的值是数字</LI></UL>
<H3>布尔运算符</H3>
<H4>示例</H4>
<PRE class="brush: bash;">    #!/bin/sh
    a=10
    b=20
    if [ $a != $b ]
    then
       echo "$a != $b : a is not equal to b"
    else
       echo "$a != $b: a is equal to b"
    fi
    if [ $a -lt 100 -a $b -gt 15 ]
    then
       echo "$a -lt 100 -a $b -gt 15 : returns true"
    else
       echo "$a -lt 100 -a $b -gt 15 : returns false"
    fi
    if [ $a -lt 100 -o $b -gt 100 ]
    then
       echo "$a -lt 100 -o $b -gt 100 : returns true"
    else
       echo "$a -lt 100 -o $b -gt 100 : returns false"
    fi
    if [ $a -lt 5 -o $b -gt 100 ]
    then
       echo "$a -lt 100 -o $b -gt 100 : returns true"
    else
       echo "$a -lt 100 -o $b -gt 100 : returns false"
    fi

运行结果：

10 != 20 : a is not equal to b
10 -lt 100 -a 20 -gt 15 : returns true
10 -lt 100 -o 20 -gt 100 : returns true
10 -lt 5 -o 20 -gt 100 : returns false
</PRE>
<H4>布尔运算符列表</H4>
<TABLE>
  <TBODY>
  <TR>
    <TH>      运算符</TH>
    <TH>      说明</TH>
    <TH>      举例</TH></TR>
  <TR>
    <TD>!</TD>
    <TD>非运算，表达式为 true 则返回 false，否则返回 true。</TD>
    <TD>[ ! false ] 返回 true。</TD></TR>
  <TR>
    <TD>-o</TD>
    <TD>或运算，有一个表达式为 true 则返回 true。</TD>
    <TD>[ $a -lt 20 -o $b -gt 100 ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-a</TD>
    <TD>与运算，两个表达式都为 true 才返回 true。</TD>
    <TD>[ $a -lt 20 -a $b -gt 100 ] 返回&nbsp;false。</TD></TR></TBODY></TABLE>
<H3>字符串运算符</H3>
<H4>示例</H4>
<PRE class="brush: bash;">    #!/bin/sh
    a="abc"
    b="efg"
    if [ $a = $b ]
    then
       echo "$a = $b : a is equal to b"
    else
       echo "$a = $b: a is not equal to b"
    fi
    if [ $a != $b ]
    then
       echo "$a != $b : a is not equal to b"
    else
       echo "$a != $b: a is equal to b"
    fi
    if [ -z $a ]
    then
       echo "-z $a : string length is zero"
    else
       echo "-z $a : string length is not zero"
    fi
    if [ -n $a ]
    then
       echo "-n $a : string length is not zero"
    else
       echo "-n $a : string length is zero"
    fi
    if [ $a ]
    then
       echo "$a : string is not empty"
    else
       echo "$a : string is empty"
    fi

运行结果：

abc = efg: a is not equal to b
abc != efg : a is not equal to b
-z abc : string length is not zero
-n abc : string length is not zero
abc : string is not empty
</PRE>
<H4>字符串运算符列表</H4>
<TABLE>
  <TBODY>
  <TR>
    <TH>      运算符</TH>
    <TH>      说明</TH>
    <TH>      举例</TH></TR>
  <TR>
    <TD>=</TD>
    <TD>检测两个字符串是否相等，相等返回 true。</TD>
    <TD>[ $a = $b ] 返回 false。</TD></TR>
  <TR>
    <TD>!=</TD>
    <TD>检测两个字符串是否相等，不相等返回 true。</TD>
    <TD>[ $a != $b ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-z</TD>
    <TD>检测字符串长度是否为0，为0返回 true。</TD>
    <TD>[ -z $a ] 返回 false。</TD></TR>
  <TR>
    <TD>-n</TD>
    <TD>检测字符串长度是否为0，不为0返回 true。</TD>
    <TD>[ -z $a ] 返回 true。</TD></TR>
  <TR>
    <TD>str</TD>
    <TD>检测字符串是否为空，不为空返回 true。</TD>
    <TD>[ $a ] 返回&nbsp;true。</TD></TR></TBODY></TABLE>
<H3>文件测试运算符</H3>
<H4>示例</H4>
<PRE class="brush: bash;">文件测试运算符用于检测 Unix 文件的各种属性。

例如，变量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”，它的大小为100字节，具有 rwx 权限。下面的代码，将检测该文件的各种属性：

    #!/bin/sh
    file="/var/www/tutorialspoint/unix/test.sh"
    if [ -r $file ]
    then
       echo "File has read access"
    else
       echo "File does not have read access"
    fi
    if [ -w $file ]
    then
       echo "File has write permission"
    else
       echo "File does not have write permission"
    fi
    if [ -x $file ]
    then
       echo "File has execute permission"
    else
       echo "File does not have execute permission"
    fi
    if [ -f $file ]
    then
       echo "File is an ordinary file"
    else
       echo "This is sepcial file"
    fi
    if [ -d $file ]
    then
       echo "File is a directory"
    else
       echo "This is not a directory"
    fi
    if [ -s $file ]
    then
       echo "File size is zero"
    else
       echo "File size is not zero"
    fi
    if [ -e $file ]
    then
       echo "File exists"
    else
       echo "File does not exist"
    fi

运行结果：

File has read access
File has write permission
File has execute permission
File is an ordinary file
This is not a directory
File size is zero
File exists    
</PRE>
<H4>文件测试运算符列表</H4>
<TABLE>
  <TBODY>
  <TR>
    <TH>      操作符</TH>
    <TH>      说明</TH>
    <TH>      举例</TH></TR>
  <TR>
    <TD>-b file</TD>
    <TD>检测文件是否是块设备文件，如果是，则返回 true。</TD>
    <TD>[ -b $file ] 返回 false。</TD></TR>
  <TR>
    <TD>-c file</TD>
    <TD>检测文件是否是字符设备文件，如果是，则返回 true。</TD>
    <TD>[ -c $file ] 返回&nbsp;false。</TD></TR>
  <TR>
    <TD>-d file</TD>
    <TD>检测文件是否是目录，如果是，则返回 true。</TD>
    <TD>[ -d $file ] 返回 false。</TD></TR>
  <TR>
    <TD>-f file</TD>
    <TD>检测文件是否是普通文件（既不是目录，也不是设备文件），如果是，则返回 true。</TD>
    <TD>[ -f $file ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-g file</TD>
    <TD>检测文件是否设置了 SGID 位，如果是，则返回 true。</TD>
    <TD>[ -g $file ] 返回&nbsp;false。</TD></TR>
  <TR>
    <TD>-k file</TD>
    <TD>检测文件是否设置了粘着位(Sticky Bit)，如果是，则返回 true。</TD>
    <TD>[ -k $file ] 返回&nbsp;false。</TD></TR>
  <TR>
    <TD>      -p file</TD>
    <TD>检测文件是否是具名管道，如果是，则返回 true。</TD>
    <TD>[ -p $file ] 返回&nbsp;false。</TD></TR>
  <TR>
    <TD>-u file</TD>
    <TD>检测文件是否设置了 SUID 位，如果是，则返回 true。</TD>
    <TD>[ -u $file ] 返回&nbsp;false。</TD></TR>
  <TR>
    <TD>-r file</TD>
    <TD>检测文件是否可读，如果是，则返回 true。</TD>
    <TD>[ -r $file ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-w file</TD>
    <TD>检测文件是否可写，如果是，则返回 true。</TD>
    <TD>[ -w $file ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-x file</TD>
    <TD>检测文件是否可执行，如果是，则返回 true。</TD>
    <TD>[ -x $file ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-s file</TD>
    <TD>检测文件是否为空（文件大小是否大于0），不为空返回 true。</TD>
    <TD>[ -s $file ] 返回&nbsp;true。</TD></TR>
  <TR>
    <TD>-e file</TD>
    <TD>检测文件（包括目录）是否存在，如果是，则返回 true。</TD>
    <TD>[ -e $file ] 返回&nbsp;true。</TD></TR></TBODY></TABLE>
<HR style="border-width: 2px; border-color: lime;">

<DIV align="center">©copyright 版权所有   作者：zzy</DIV>
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shCore.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushJava.js" type="text/javascript"></SCRIPT>
	
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushJScript.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushXml.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushSql.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushBash.js" type="text/javascript"></SCRIPT>
	
<SCRIPT src="../../pub/syntaxhighlighter/init.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/js/jquery.tools.min.js" type="text/javascript"></SCRIPT>
 <!-- make all links with the 'rel' attribute open overlays --> 
<SCRIPT>
  $(function() {
      $("#apple img[rel]").overlay({effect: 'apple'});
    });
</SCRIPT>
 </DIV></BODY></HTML>
